package com.zhiyou100.api.collections_demo;

import java.util.Arrays;
import java.util.List;

public class TestLambda {

    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(12, 45, 78, 98, 65, 21, 32);
//        Comparator<Integer> comparator = (o1, o2)-> o1 - o2;
        //使用lambda表示简化书写
        list.sort((o1, o2) -> o1 - o2);
        System.out.println(list);
        //函数式接口只有一个需要我们去实现的抽象方法，而抽象方法缺方法体，那就补方法体，方法的参数我们得去使用，声明下
        // (参数....) -> {补的方法体}
        list.forEach(a ->
                System.out.println(a)
        );
    }

    public static void test() {
        LambdaInterface lif = new LambdaInterface() {
            @Override
            public void add(int a, int b) {
                System.out.println(a + b);
            }
        };
        lif.add(1, 2);
        //基于lambda表达式创建函数式接口类型的对象
        LambdaInterface lf = (int a, int b) -> {
            System.out.println(a + b);
        };
        lf.add(1, 2);
        //将要实现方法参数的类型省略   类型jdk会根据要实现的方法自行推断
        LambdaInterface lf2 = (a, b) -> {
            System.out.println(a + b);
        };
        lf2.add(1, 2);
        //如果方法体只有一句话，可以省略{}
        LambdaInterface lf3 = (a, b) -> System.out.println(a + b);

        //如果要实现的方法有返回值   按照常规逻辑使用return返回数据即可
        LambdaInterface2 lif2 = (a, b) -> {
            int sum = a + b;
            return sum;
        };
        //当有返回值时，方法体只有一句时,return也可以省略
        LambdaInterface2 lif3 = (a, b) -> a + b;
    }

}
